package main.矩阵;

import java.util.Arrays;
import java.util.List;

/**
 * @author tmh
 * @date 2024/7/26 16:54
 * @description
 */
public class T54螺旋矩阵 {
    public List<Integer> spiralOrder(int[][] matrix) {
        //记录存储元素的位置
        int index = 0;
        //初始化上下左右的位置
        int top = 0, bottom = matrix.length - 1, left = 0, right = matrix[0].length - 1;
        //定义一个保存结果的数组
        Integer[] result = new Integer[(bottom + 1) * (right + 1)];
        while (true) {
            //开始上下左右的遍历,每次遍历一个方位就要进行一次判断
            for (int i = left; i <= right; i++) {
                result[index++] = matrix[top][i];
            }
            //第一层判断完了，top就要++，往下一层进行判断
            if (++top > bottom) {
                break;
            }
            //开始遍历右边--从上往下
            for (int i = top; i <= bottom; i++) {
                result[index++] = matrix[i][right];
            }
            if (--right < left) {
                break;
            }
            //开始遍历下面
            for (int i = right; i >= left; i--) {
                result[index++] = matrix[bottom][i];
            }
            if (--bottom<top) {
                break;
            }
            //开始遍历左面  -- 从下往上
            for (int i = bottom; i >= top; i--) {
                result[index++] = matrix[i][left];
            }
            if (++left>right) {
                break;
            }
        }
        return Arrays.asList(result);
    }
}
